package com.crm.api.mapper;

import com.crm.api.entity.Business;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 业务数据访问接口
 */
@Mapper
public interface BusinessMapper {

    /**
     * 查询业务列表（包含客户、业务类型、员工等详细信息）
     */
    List<Map<String, Object>> findBusinessesWithDetails(Map<String, Object> params);

    /**
     * 统计业务数量
     */
    Integer countBusinesses(Map<String, Object> params);

    /**
     * 根据ID查询业务
     */
    Business findById(Integer id);

    /**
     * 根据ID查询业务详情（包含关联信息）
     */
    Map<String, Object> findByIdWithDetails(Integer id);

    /**
     * 插入业务
     */
    void insert(Business business);

    /**
     * 更新业务
     */
    void update(Business business);

    /**
     * 根据ID删除业务
     */
    void deleteById(Integer id);

    /**
     * 更新业务状态
     */
    void updateStatus(@Param("id") Integer id, 
                     @Param("businessStatus") String businessStatus, 
                     @Param("updatedAt") Date updatedAt);

    /**
     * 更新业务进度备注
     */
    void updateProgress(@Param("id") Integer id, 
                       @Param("progressNotes") String progressNotes, 
                       @Param("updatedAt") Date updatedAt);

    /**
     * 获取最大业务编号
     */
    String getMaxBusinessCode();

    /**
     * 获取业务总数
     */
    Integer getTotalCount(Map<String, Object> params);

    /**
     * 获取业务总金额
     */
    Double getTotalAmount(Map<String, Object> params);

    /**
     * 获取状态统计
     */
    List<Map<String, Object>> getStatusStats(Map<String, Object> params);

    /**
     * 获取类型统计
     */
    List<Map<String, Object>> getTypeStats(Map<String, Object> params);

    /**
     * 获取月度统计
     */
    List<Map<String, Object>> getMonthlyStats(Map<String, Object> params);

    /**
     * 获取客户业务统计
     */
    List<Map<String, Object>> getCustomerBusinessStats();

    /**
     * 获取总营收（已完成业务的金额总和）
     */
    BigDecimal getTotalRevenue();
}